/*******************************************************************************
* Copyright (c) 2011 Frank Appel and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Frank Appel - initial API and implementation
******************************************************************************/
package com.codeaffine.example.rwt.osgi.ui.example.apps;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import com.codeaffine.example.rwt.osgi.ui.platform.PageService;
import com.codeaffine.example.rwt.osgi.ui.platform.PageTracker;
import com.codeaffine.example.rwt.osgi.ui.platform.ServiceProvider;
import com.codeaffine.example.rwt.osgi.ui.platform.UIContributor;
public class MenuBarProvider implements UIContributor {
public static final String MENU_BAR_CONTROL = MenuBarProvider.class.getName() + "#MENUBAR";
// NOTE: this value reflects the height of the menubar_background image set via css
static final int MENU_BAR_HEIGHT = 41;
private static final String MENUBAR_BACKGROUND = "menubar_background";
private static final String MENU_BUTTON = "menu_button";
private final ServiceProvider serviceProvider;
public MenuBarProvider( ServiceProvider serviceProvider ) {
this.serviceProvider = serviceProvider;
}
@Override
public String getId() {
return MENU_BAR_CONTROL;
}
@Override
public Control contribute( Composite parent ) {
final Composite result = new Composite( parent, SWT.INHERIT_DEFAULT );
result.setData( RWT.CUSTOM_VARIANT, MENUBAR_BACKGROUND );
result.setLayout( new RowLayout() );
final PageService pageService = serviceProvider.get( PageService.class );
pageService.addPageTracker( new PageTracker() {
Map<UIContributor,Button> buttons = new HashMap<UIContributor,Button>();
@Override
public void pageAdded( UIContributor page ) {
buttons.put( page, createMenuButton( result, pageService, page.getId() ) );
}
@Override
public void pageRemoved( UIContributor page ) {
Button removed = buttons.remove( page );
removed.dispose();
}
} );
return result;
}
Button createMenuButton( Composite parent,
final PageService pageService,
final String pageId )
{
Button result = new Button( parent, SWT.PUSH );
result.setData( RWT.CUSTOM_VARIANT, MENU_BUTTON );
result.setText( pageId );
result.addSelectionListener( new SelectionAdapter() {
private static final long serialVersionUID = 1L;
@Override
public void widgetSelected( SelectionEvent evt ) {
pageService.selectPage( pageId );
}
} );
parent.layout( true, true );
pageService.selectPage( pageId );
return result;
}
}